home *** CD-ROM | disk | FTP | other *** search
/ Business & Presentations / Business and Presentations - Volume 1 (1995)(Sideface)(NL).iso / hputils / djprnt / parms.cpp < prev    next >
C/C++ Source or Header  |  1990-02-10  |  3KB  |  107 lines

  1. /*
  2.     PARMS.CPP
  3.     Copyright (c) Les Hancock 1990
  4. */
  5.  
  6. #include <stdio.h>
  7. #include <stdlib.h>
  8. #include <stream.hpp>
  9. #include "list.hpp"
  10. #include "parms.hpp"
  11.  
  12. static void help(void);
  13.  
  14. /*
  15.     Constructor sets defaults, parses the command line for options
  16.     and for file names.  NB: values are not currently being validated.
  17. */
  18. parms::parms(int argc, char *argv[])
  19. {
  20.     filebuf *flag = 0;             // set to 1 when valid output file is opened
  21.     pq = 0;                           // print quality defaults to lowest value
  22.     title = 1;                               // default: titles at head of page
  23.     tab_size = 3;
  24.     max_rows = 48;
  25.     max_cols = 196;                          //  suitable for 20 chars per inch
  26.     gutter = 6;
  27.     cpi = 20;                                    // 20 chars per horizontal inch
  28.     lpi = 6;    // 6 lines per vertical inch
  29.     if (argc == 1)          // if no arguments on command line, user needs help
  30.         help();
  31.     for (int i = 1; i < argc; ++i)                 // for all command-line args
  32.         if (*argv[i] == '-')                            // options begin with -
  33.         {
  34.             char *ptr = argv[i] + 1;
  35.             switch(*ptr)
  36.             {
  37.                 case '?':    // user wants help
  38.                     help();    // ends program
  39.                 case 'h':    // horizontal spacing: 10, 16, 20 cpi
  40.                     if ((cpi = atoi(++ptr)) <= 10)
  41.                     {
  42.                         cpi = 10;
  43.                         max_cols = 100;
  44.                         gutter = 4;
  45.                     }
  46.                     else if (cpi <= 17)
  47.                     {
  48.                         cpi = 16;
  49.                         max_cols = 164;
  50.                         gutter = 6;
  51.                     }
  52.                     break;
  53.                 case 'n':   // suppress page headers
  54.                     title = 0;
  55.                     break;
  56.                 case 'q':    // print quality -- should be 0, 1 or 2
  57.                     pq = *++ptr - '0';
  58.                     break;
  59.                 case 't':    // tab expansion (max 31 spaces)
  60.                     tab_size = atoi(++ptr);
  61.                     break;
  62.                 case 'o':    // output file name follows
  63.                     if (flag != 0)    // if somebody's already opened a file
  64.                         fp_out.close();    // close it, use only last file named
  65.                     if ((flag = fp_out.open(++ptr, output)) == 0)
  66.                     {
  67.                         cerr << "can't open '" << ptr << "' for output";
  68.                         exit(1);
  69.                     }
  70.                     break;
  71.                 case 'v':    // vertical spacing: 6 or 8 lines per inch
  72.                     if ((lpi = atoi(++ptr)) > 6)
  73.                     {
  74.                         lpi = 8;
  75.                         max_rows = 63;                       // not 64, for some reason
  76.                     }
  77.                     break;
  78.                 default:
  79.                     cerr << "unknown option " << argv[i] << '\n';
  80.             }
  81.         }
  82.         else if (*argv[i] == '?')
  83.             help();
  84.         else          // it was a file name, not an option -- add it to the list
  85.             file_list.push_file_name(argv[i]);
  86.         if (flag == 0)                           // no output file was specified
  87.             fp_out.open("LPT1", output);
  88. }
  89.  
  90. static void
  91. help()
  92. {
  93.     cout << 
  94.         "\nusage: djprint [-n] [-tx] [-qx] [-vx] "
  95.         "[-hxx] [[-]?] [-ofnam] file [file...]\n\n"
  96.         "\t-n:   no page headers (headers by default)\n"
  97.         "\t-tx:  expand tabs to x spaces (default 3)\n"
  98.         "\t-qx:  printer quality 0, 1 or 2; 0 = lowest (default 0)\n"
  99.         "\t-vx:  x = 6 or 8 lines per inch (default 6)\n"
  100.         "\t-hxx: xx = 10, 16 or 20 characters per inch (default 20)\n"
  101.         "\t? or -?:    show this help message\n"
  102.         "\t-ofnam: output to file 'fnam' (default: LPT1)\n\n"
  103.         "Version 1.0 copyright (c) Les Hancock 1990 (CIS 74156,3262; "
  104.         "Prodigy RRMT53A)\n";
  105.     exit(-1);
  106. }
  107.